package com.cskaoyan.javase.oop3._1interface._1basic;

/**
 * 自此，我们已经引入了接口的概念。接下来，我们重点来研究一个接口的特点和使用。
 * 接口的特点我们主要研究以下方面
 *      1.接口的命名
 *          某些程序员喜欢在接口的名字前,加一个大写字母I,表示这是一个接口
 *              以示区分
 *          但是这不是必须的,了解知道即可.
 *
 *      2.接口的声明特点
 *          接口的访问权限修饰符有两种,不再赘述,和class一样
 *          接口的修饰符还允许有哪些?
 *              a.接口允不允许final修饰,因为接口必须要实现,否者没意义.
 *              b.接口的修饰符列表中,本身就隐含关键字abstract
 *                  接口就是抽象的
 *                  所以接口中可以定义抽象方法.
 *                  既然是默认,abstract关键字就不要写出来了
 *
 *      3.接口的实现类的书写格式
 *          很多程序员喜欢在写接口实现类时,在接口的所在包创建一个名为"impl"的包
 *              用来存放接口的实现类
 *              并命名为"接口名 + Impl"
 *              这也不是必须的,了解即可
 *      4.成员特点
 *          a.属性,变量能否定义?
 *              接口注重行为的抽象,不注重属性
 *              实际上接口中没有成员变量,也没有静态成员变量
 *              接口中的变量默认全部都是"public static final"修饰的全局常量
 *       当然这些默认的修饰符,不要写出来,接口中定义全局常量,应该直接写:
 *               数据类型 全局常量名 = 值;
 *           注意事项:
 *                  1.接口中不允许定义静态代码块,接口中的全局常量必须显式赋值,没有其他手段赋值.
 *                  2.实际上接口能够定义的所有内容,全部都是public修饰的,并且修饰符不可更改.
 *                  3.接口注重行为,不关注属性.实际开发中,95%以上的情况下,接口都只有方法,没有属性
 *                      当然如果你有这种需求:
 *                      接口的所有实现类,都需要一个全局常量时,可以在接口中定义这个全局常量,给子类用.
 *
 *          b.行为,方法能否定义?
 *                  接口中的方法在Java8之前,全部都是默认public abstract修饰的抽象方法
 *                  当然默认的修饰符,不要写出来,public的访问权限也是不可以修改的
 *                  接口要想定义抽象方法,直接这么写:
 *                      返回值类型 方法名(形参列表);
 *
 *          c.接口有无构造器?
 *              接口不能创建对象,并且接口中的属性都是全局常量,也没有必要赋值
 *                  于是构造器自己不能用,子类也不需要用
 *                  那么构造器就没有任何意义
 *                  接口中没有构造器
 *          d.代码块
 *                  没有构造器,也没有构造代码块
 *                  也没有静态代码块
 *
 *      以上总结,接口中可以定义全局常量和抽象方法,其它的没了,接口和类的成员定义差距非常大.
 *
 *
 * @since 16:25
 * @author wuguidong@cskaoyan.onaliyun.com
 */
// Modifier 'abstract' is redundant for interfaces
public interface IDemo {
    /*
        接口中定义全局常量,应该如下定义
     */
    int a = 10;

    /*
        接口中定义抽象方法,应该如下定义
        而且大多数情况下,接口中都只有抽象方法
        我们一般看到的接口都会十分简洁
        如下定义:
     */
    void test();
    int test2(int a);


}
